package com.emaplink.cryptoutil;


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;

import java.nio.charset.StandardCharsets;

import static com.emaplink.cryptoutil.sm.FileUtilDec.*;


@SpringBootApplication()
public class CryptoUtilApplication {
    // 示例用法
    static byte[] key = "ZUC_128_Key_1234".getBytes(StandardCharsets.UTF_8);        // ZUC-128: 128位密钥
    static byte[] iv = "ZUC_IV_123456789".getBytes(StandardCharsets.UTF_8);         // ZUC-128: 128位初始向量

    /**
     * 主启动函数
     */
    public static void main(String[] args) {
        SpringApplication.run(CryptoUtilApplication.class, args);


//        try {
//
//            String disk = "E";
//            String content = "123中国123的";
//            //分段读取文件长度
//            int chunkSize = 10;
//            //从哪个位置开始读取
//            int position = 3;
//            // 截取数据长度
//            int length = 4;
//            //type 1:创建明文文件  2:加密文件  3:解密文件  4:分段加密解密文件 其他:创建明文文件并分段加密解密文件
//            String type = "5";
//
//            if (args.length > 0) {
//                disk = args[0];
//                content = args[1];
//                chunkSize = Integer.valueOf(args[2]);
//                position = Integer.valueOf(args[3]);
//                length = Integer.valueOf(args[4]);
//                type = args[5];
//            }
//
//            String sourceFile = disk + ":\\1.txt";
//            String encryptedFile = disk + ":\\2.txt";
//            String decryptedFile = disk + ":\\3.txt";
//
//            if ("1".equals(type)) {
//                writeWithFileOutputStream(sourceFile, content);
//            } else if ("2".equals(type)) {
//                encryptFileInChunks(sourceFile, encryptedFile, key, iv, chunkSize);
//            } else if ("3".equals(type)) {
//                decryptFileInChunks(encryptedFile, decryptedFile, key, iv, position, length,0);
//            } else if ("4".equals(type)) {
//                encryptFileInChunks(sourceFile, encryptedFile, key, iv, chunkSize);
//                decryptFileInChunks(encryptedFile, decryptedFile, key, iv, position, length,chunkSize);
//            } else {
//                writeWithFileOutputStream(sourceFile, content);
//                encryptFileInChunks(sourceFile, encryptedFile, key, iv, chunkSize);
//                decryptFileInChunks(encryptedFile, decryptedFile, key, iv, position, length,chunkSize);
//            }
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        SpringApplication springApplication = new SpringApplication(CryptoUtilApplication.class);
//        springApplication.setBannerMode(Banner.Mode.OFF);
//        ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
//        Environment env = configurableApplicationContext.getEnvironment();
//        try {
            //启动 --plainText=123
            // start  数据库加解密 baomidou-Rsa
//            String plainText = env.getProperty("plainText");
//            System.out.println("待加密参数:" + plainText);
//            String[] keys = CryptoUtils.genKeyPair(512);
//            System.out.println("公钥:" + keys[0]);
//            System.out.println("私钥:" + keys[1]);
//            String encrypt = CryptoUtils.encrypt(keys[0], env.getProperty("plainText"));
//            System.out.println("密文:" + encrypt);
//            System.out.println("明文:" + CryptoUtils.decrypt(keys[1], encrypt));
            // end  数据库加解密 baomidou-Rsa
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
    }
}
